<?php

namespace Gds\ArticleBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Gds\ArticleBundle\Entity\Article
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Gds\ArticleBundle\Entity\ArticleRepository")
 */
class Article {
    /**
     * @ORM\OneToMany(targetEntity="Gds\ArticleBundle\Entity\LigneInventaire", mappedBy="article")
     */
    private $lignesInventaire; // Ici commentaires prend un "s", car un article a plusieurs commentaires !
    /**
     * @ORM\OneToMany(targetEntity="Gds\VenteBundle\Entity\LigneFactureAvoirClient", mappedBy="article", cascade={"remove", "persist"})
     */
    private $lignes_facture_avoir_Client; // Ici commentaires prend un "s", car un article a plusieurs commentaires !
    /**
     * @ORM\OneToMany(targetEntity="Gds\VenteBundle\Entity\LigneBonCommandeClient", mappedBy="article", cascade={"remove", "persist"})
     */
    private $lignes_bon_commande; // Ici commentaires prend un "s", car un article a plusieurs commentaires !
    /**
     * @ORM\OneToMany(targetEntity="Gds\AchatBundle\Entity\LigneBonCommandeFournisseur", mappedBy="article", cascade={"remove", "persist"})
     */
    private $lignes_bon_commande_fournisseur; // Ici commentaires prend un "s", car un article a plusieurs commentaires !

    /**
     * @ORM\OneToMany(targetEntity="Gds\VenteBundle\Entity\LigneDevis", mappedBy="article", cascade={"remove", "persist"})
     */
    private $lignesDevis; // Ici commentaires prend un "s", car un article a plusieurs commentaires !
    /**
     * @ORM\OneToMany(targetEntity="Gds\AchatBundle\Entity\LigneBonLivraisonFournisseur", mappedBy="article", cascade={"remove", "persist"})
     */
    private $lignesBonLivraisonFournisseur; // Ici commentaires prend un "s", car un article a plusieurs commentaires !
    /**
     * @ORM\OneToMany(targetEntity="Gds\VenteBundle\Entity\LigneBonLivraisonClient", mappedBy="article", cascade={"remove", "persist"})
     */
    private $lignesBonLivraisonClient; // Ici commentaires prend un "s", car un article a plusieurs commentaires !
    /**
     * @ORM\OneToMany(targetEntity="Gds\VenteBundle\Entity\LigneBonLivraisonRetourClient", mappedBy="article", cascade={"remove", "persist"})
     */
    private $lignes_bon_livraison_retour_client; // Ici commentaires prend un "s", car un article a plusieurs commentaires !
    /**
     * @ORM\OneToMany(targetEntity="Gds\VenteBundle\Entity\HistoryLigneBonLivraisonClient", mappedBy="article", cascade={"remove", "persist"})
     */
    private $historylignesBonLivraisonClient; // Ici commentaires prend un "s", car un article a plusieurs commentaires !
    /**
     * @ORM\ManyToOne(targetEntity="Gds\ArticleBundle\Entity\Famille", inversedBy="articles")
     * @ORM\JoinColumn(nullable=false)
     */
    private $famille;

    /**
     * @ORM\ManyToOne(targetEntity="Gds\ArticleBundle\Entity\Unite", inversedBy="articles")
     * @ORM\JoinColumn(nullable=false)
     */
    private $unite;

    /**
     * @ORM\OneToMany(targetEntity="Gds\ArticleBundle\Entity\Stock", mappedBy="article", cascade={"remove", "persist"})
     */
    private $stocks; // Ici commentaires prend un "s", car un article a plusieurs commentaires !
    /**
     * @ORM\OneToMany(targetEntity="Gds\VenteBundle\Entity\CategorieRemise", mappedBy="article", cascade={"remove", "persist"})
     */
    private $categoriesRemise; // Ici commentaires prend un "s", car un article a plusieurs commentaires !
    /**
     * @ORM\OneToMany(targetEntity="Gds\AchatBundle\Entity\CategorieRemiseFournisseur", mappedBy="article", cascade={"remove", "persist"})
     */
    private $categoriesRemiseFournisseur; // Ici commentaires prend un "s", car un article a plusieurs commentaires !
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string $reference
     *
     * @ORM\Column(name="reference", type="string", length=255,unique=true)
     */
    private $reference;

    /**
     * @var string $designation
     *
     * @ORM\Column(name="designation", type="string", length=255,unique=true)
     */
    private $designation;

    /**
     * @var string $code_barre
     *
     * @ORM\Column(name="code_barre", type="string", length=255,unique=true,nullable=true)
     */
    private $code_barre;

    /**
     * @var decimal $taux_tva
     *
     * @ORM\Column(name="taux_tva", type="decimal" , scale=2)
     */
    private $taux_tva;

    /**
     * @var decimal $remise
     *
     * @ORM\Column(name="remise", type="decimal", scale=2)
     */
    private $remise;

    /**
     * @var decimal $remise_max
     *
     * @ORM\Column(name="remise_max", type="decimal", scale=3)
     */
    private $remise_max;

    /**
     * @var decimal $prix_achat_ht
     *
     * @ORM\Column(name="prix_achat_ht", type="decimal", scale=3)
     */
    private $prix_achat_ht;

    /**
     * @var decimal $prix_vente
     *
     * @ORM\Column(name="prix_vente", type="decimal", scale=3)
     */
    private $prix_vente;

    /**
     * @var boolean $is_supprimer
     *
     * @ORM\Column(name="is_supprimer", type="boolean")
     */
    private $is_supprimer;

    /**
     * Constructor
     */
    public function __construct() {
        $this->lignes_bon_commande = new \Doctrine\Common\Collections\ArrayCollection();
        $this->lignes_bon_commande_fournisseur = new \Doctrine\Common\Collections\ArrayCollection();
        $this->lignesDevis = new \Doctrine\Common\Collections\ArrayCollection();
        $this->lignesBonLivraisonClient = new \Doctrine\Common\Collections\ArrayCollection();
        $this->historylignesBonLivraisonClient = new \Doctrine\Common\Collections\ArrayCollection();
        $this->stocks = new \Doctrine\Common\Collections\ArrayCollection();
        $this->categoriesRemise = new \Doctrine\Common\Collections\ArrayCollection();
    }

    public function __toString() {
        return $this->reference;
    }
    public function getPrixAchatTtc(){
        return round($this->prix_achat_ht*(1+$this->taux_tva/100),3);
    }
    /**
     * Get id
     *
     * @return integer 
     */
    public function getId() {
        return $this->id;
    }

    /**
     * Set reference
     *
     * @param string $reference
     * @return Article
     */
    public function setReference($reference) {
        $this->reference = $reference;

        return $this;
    }

    /**
     * Get reference
     *
     * @return string 
     */
    public function getReference() {
        return $this->reference;
    }

    /**
     * Set designation
     *
     * @param string $designation
     * @return Article
     */
    public function setDesignation($designation) {
        $this->designation = $designation;

        return $this;
    }

    /**
     * Get designation
     *
     * @return string 
     */
    public function getDesignation() {
        return $this->designation;
    }

    /**
     * Set code_barre
     *
     * @param string $codeBarre
     * @return Article
     */
    public function setCodeBarre($codeBarre) {
        $this->code_barre = $codeBarre;

        return $this;
    }

    /**
     * Get code_barre
     *
     * @return string 
     */
    public function getCodeBarre() {
        return $this->code_barre;
    }

    /**
     * Set taux_tva
     *
     * @param float $tauxTva
     * @return Article
     */
    public function setTauxTva($tauxTva) {
        $this->taux_tva = $tauxTva;

        return $this;
    }

    /**
     * Get taux_tva
     *
     * @return float 
     */
    public function getTauxTva() {
        return $this->taux_tva;
    }

    /**
     * Set remise
     *
     * @param float $remise
     * @return Article
     */
    public function setRemise($remise) {
        $this->remise = $remise;

        return $this;
    }

    /**
     * Get remise
     *
     * @return float 
     */
    public function getRemise() {
        return $this->remise;
    }

    /**
     * Set remise_max
     *
     * @param float $remiseMax
     * @return Article
     */
    public function setRemiseMax($remiseMax) {
        $this->remise_max = $remiseMax;

        return $this;
    }

    /**
     * Get remise_max
     *
     * @return float 
     */
    public function getRemiseMax() {
        return $this->remise_max;
    }

    /**
     * Set prix_achat_ht
     *
     * @param float $prixAchatHt
     * @return Article
     */
    public function setPrixAchatHt($prixAchatHt) {
        $this->prix_achat_ht = $prixAchatHt;

        return $this;
    }

    /**
     * Get prix_achat_ht
     *
     * @return float 
     */
    public function getPrixAchatHt() {
        return $this->prix_achat_ht;
    }

    /**
     * Set prix_vente
     *
     * @param float $prixVente
     * @return Article
     */
    public function setPrixVente($prixVente) {
        $this->prix_vente = $prixVente;

        return $this;
    }

    /**
     * Get prix_vente
     *
     * @return float 
     */
    public function getPrixVente() {
        return $this->prix_vente;
    }

    /**
     * Set is_supprimer
     *
     * @param boolean $isSupprimer
     * @return Article
     */
    public function setIsSupprimer($isSupprimer) {
        $this->is_supprimer = $isSupprimer;

        return $this;
    }

    /**
     * Get is_supprimer
     *
     * @return boolean 
     */
    public function getIsSupprimer() {
        return $this->is_supprimer;
    }

    /**
     * Add lignes_bon_commande
     *
     * @param \Gds\VenteBundle\Entity\LigneBonCommandeClient $lignesBonCommande
     * @return Article
     */
    public function addLignesBonCommande(\Gds\VenteBundle\Entity\LigneBonCommandeClient $lignesBonCommande) {
        $this->lignes_bon_commande[] = $lignesBonCommande;

        return $this;
    }

    /**
     * Remove lignes_bon_commande
     *
     * @param \Gds\VenteBundle\Entity\LigneBonCommandeClient $lignesBonCommande
     */
    public function removeLignesBonCommande(\Gds\VenteBundle\Entity\LigneBonCommandeClient $lignesBonCommande) {
        $this->lignes_bon_commande->removeElement($lignesBonCommande);
    }

    /**
     * Get lignes_bon_commande
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getLignesBonCommande() {
        return $this->lignes_bon_commande;
    }

    /**
     * Add lignes_bon_commande_fournisseur
     *
     * @param \Gds\AchatBundle\Entity\LigneBonCommandeFournisseur $lignesBonCommandeFournisseur
     * @return Article
     */
    public function addLignesBonCommandeFournisseur(\Gds\AchatBundle\Entity\LigneBonCommandeFournisseur $lignesBonCommandeFournisseur) {
        $this->lignes_bon_commande_fournisseur[] = $lignesBonCommandeFournisseur;

        return $this;
    }

    /**
     * Remove lignes_bon_commande_fournisseur
     *
     * @param \Gds\AchatBundle\Entity\LigneBonCommandeFournisseur $lignesBonCommandeFournisseur
     */
    public function removeLignesBonCommandeFournisseur(\Gds\AchatBundle\Entity\LigneBonCommandeFournisseur $lignesBonCommandeFournisseur) {
        $this->lignes_bon_commande_fournisseur->removeElement($lignesBonCommandeFournisseur);
    }

    /**
     * Get lignes_bon_commande_fournisseur
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getLignesBonCommandeFournisseur() {
        return $this->lignes_bon_commande_fournisseur;
    }

    /**
     * Add lignesDevis
     *
     * @param \Gds\VenteBundle\Entity\LigneDevis $lignesDevis
     * @return Article
     */
    public function addLignesDevi(\Gds\VenteBundle\Entity\LigneDevis $lignesDevis) {
        $this->lignesDevis[] = $lignesDevis;

        return $this;
    }

    /**
     * Remove lignesDevis
     *
     * @param \Gds\VenteBundle\Entity\LigneDevis $lignesDevis
     */
    public function removeLignesDevi(\Gds\VenteBundle\Entity\LigneDevis $lignesDevis) {
        $this->lignesDevis->removeElement($lignesDevis);
    }

    /**
     * Get lignesDevis
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getLignesDevis() {
        return $this->lignesDevis;
    }

    /**
     * Add lignesBonLivraisonClient
     *
     * @param \Gds\VenteBundle\Entity\LigneBonLivraisonClient $lignesBonLivraisonClient
     * @return Article
     */
    public function addLignesBonLivraisonClient(\Gds\VenteBundle\Entity\LigneBonLivraisonClient $lignesBonLivraisonClient) {
        $this->lignesBonLivraisonClient[] = $lignesBonLivraisonClient;

        return $this;
    }

    /**
     * Remove lignesBonLivraisonClient
     *
     * @param \Gds\VenteBundle\Entity\LigneBonLivraisonClient $lignesBonLivraisonClient
     */
    public function removeLignesBonLivraisonClient(\Gds\VenteBundle\Entity\LigneBonLivraisonClient $lignesBonLivraisonClient) {
        $this->lignesBonLivraisonClient->removeElement($lignesBonLivraisonClient);
    }

    /**
     * Get lignesBonLivraisonClient
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getLignesBonLivraisonClient() {
        return $this->lignesBonLivraisonClient;
    }

    /**
     * Add historylignesBonLivraisonClient
     *
     * @param \Gds\VenteBundle\Entity\HistoryLigneBonLivraisonClient $historylignesBonLivraisonClient
     * @return Article
     */
    public function addHistorylignesBonLivraisonClient(\Gds\VenteBundle\Entity\HistoryLigneBonLivraisonClient $historylignesBonLivraisonClient) {
        $this->historylignesBonLivraisonClient[] = $historylignesBonLivraisonClient;

        return $this;
    }

    /**
     * Remove historylignesBonLivraisonClient
     *
     * @param \Gds\VenteBundle\Entity\HistoryLigneBonLivraisonClient $historylignesBonLivraisonClient
     */
    public function removeHistorylignesBonLivraisonClient(\Gds\VenteBundle\Entity\HistoryLigneBonLivraisonClient $historylignesBonLivraisonClient) {
        $this->historylignesBonLivraisonClient->removeElement($historylignesBonLivraisonClient);
    }

    /**
     * Get historylignesBonLivraisonClient
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getHistorylignesBonLivraisonClient() {
        return $this->historylignesBonLivraisonClient;
    }

    /**
     * Set famille
     *
     * @param \Gds\ArticleBundle\Entity\Famille $famille
     * @return Article
     */
    public function setFamille(\Gds\ArticleBundle\Entity\Famille $famille) {
        $this->famille = $famille;

        return $this;
    }

    /**
     * Get famille
     *
     * @return \Gds\ArticleBundle\Entity\Famille 
     */
    public function getFamille() {
        return $this->famille;
    }

    /**
     * Set unite
     *
     * @param \Gds\ArticleBundle\Entity\Unite $unite
     * @return Article
     */
    public function setUnite(\Gds\ArticleBundle\Entity\Unite $unite) {
        $this->unite = $unite;

        return $this;
    }

    /**
     * Get unite
     *
     * @return \Gds\ArticleBundle\Entity\Unite 
     */
    public function getUnite() {
        return $this->unite;
    }

    /**
     * Add stocks
     *
     * @param \Gds\ArticleBundle\Entity\Stock $stocks
     * @return Article
     */
    public function addStock(\Gds\ArticleBundle\Entity\Stock $stocks) {
        $this->stocks[] = $stocks;

        return $this;
    }

    /**
     * Remove stocks
     *
     * @param \Gds\ArticleBundle\Entity\Stock $stocks
     */
    public function removeStock(\Gds\ArticleBundle\Entity\Stock $stocks) {
        $this->stocks->removeElement($stocks);
    }

    /**
     * Get stocks
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getStocks() {
        return $this->stocks;
    }

    /**
     * Add categoriesRemise
     *
     * @param \Gds\VenteBundle\Entity\CategorieRemise $categoriesRemise
     * @return Article
     */
    public function addCategoriesRemise(\Gds\VenteBundle\Entity\CategorieRemise $categoriesRemise) {
        $this->categoriesRemise[] = $categoriesRemise;

        return $this;
    }

    /**
     * Remove categoriesRemise
     *
     * @param \Gds\VenteBundle\Entity\CategorieRemise $categoriesRemise
     */
    public function removeCategoriesRemise(\Gds\VenteBundle\Entity\CategorieRemise $categoriesRemise) {
        $this->categoriesRemise->removeElement($categoriesRemise);
    }

    /**
     * Get categoriesRemise
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getCategoriesRemise() {
        return $this->categoriesRemise;
    }

    /**
     * Add categoriesRemiseFournisseur
     *
     * @param \Gds\AchatBundle\Entity\CategorieRemiseFournisseur $categoriesRemiseFournisseur
     * @return Article
     */
    public function addCategoriesRemiseFournisseur(\Gds\AchatBundle\Entity\CategorieRemiseFournisseur $categoriesRemiseFournisseur) {
        $this->categoriesRemiseFournisseur[] = $categoriesRemiseFournisseur;

        return $this;
    }

    /**
     * Remove categoriesRemiseFournisseur
     *
     * @param \Gds\AchatBundle\Entity\CategorieRemiseFournisseur $categoriesRemiseFournisseur
     */
    public function removeCategoriesRemiseFournisseur(\Gds\AchatBundle\Entity\CategorieRemiseFournisseur $categoriesRemiseFournisseur) {
        $this->categoriesRemiseFournisseur->removeElement($categoriesRemiseFournisseur);
    }

    /**
     * Get categoriesRemiseFournisseur
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getCategoriesRemiseFournisseur() {
        return $this->categoriesRemiseFournisseur;
    }

    /**
     * Add lignes_bon_livraison_retour_client
     *
     * @param \Gds\VenteBundle\Entity\LigneBonLivraisonRetourClient $lignesBonLivraisonRetourClient
     * @return Article
     */
    public function addLignesBonLivraisonRetourClient(\Gds\VenteBundle\Entity\LigneBonLivraisonRetourClient $lignesBonLivraisonRetourClient) {
        $this->lignes_bon_livraison_retour_client[] = $lignesBonLivraisonRetourClient;

        return $this;
    }

    /**
     * Remove lignes_bon_livraison_retour_client
     *
     * @param \Gds\VenteBundle\Entity\LigneBonLivraisonRetourClient $lignesBonLivraisonRetourClient
     */
    public function removeLignesBonLivraisonRetourClient(\Gds\VenteBundle\Entity\LigneBonLivraisonRetourClient $lignesBonLivraisonRetourClient) {
        $this->lignes_bon_livraison_retour_client->removeElement($lignesBonLivraisonRetourClient);
    }

    /**
     * Get lignes_bon_livraison_retour_client
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getLignesBonLivraisonRetourClient() {
        return $this->lignes_bon_livraison_retour_client;
    }

    /**
     * Add lignesBonLivraisonFournisseur
     *
     * @param \Gds\AchatBundle\Entity\LigneBonLivraisonFournisseur $lignesBonLivraisonFournisseur
     * @return Article
     */
    public function addLignesBonLivraisonFournisseur(\Gds\AchatBundle\Entity\LigneBonLivraisonFournisseur $lignesBonLivraisonFournisseur) {
        $this->lignesBonLivraisonFournisseur[] = $lignesBonLivraisonFournisseur;

        return $this;
    }

    /**
     * Remove lignesBonLivraisonFournisseur
     *
     * @param \Gds\AchatBundle\Entity\LigneBonLivraisonFournisseur $lignesBonLivraisonFournisseur
     */
    public function removeLignesBonLivraisonFournisseur(\Gds\AchatBundle\Entity\LigneBonLivraisonFournisseur $lignesBonLivraisonFournisseur) {
        $this->lignesBonLivraisonFournisseur->removeElement($lignesBonLivraisonFournisseur);
    }

    /**
     * Get lignesBonLivraisonFournisseur
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getLignesBonLivraisonFournisseur() {
        return $this->lignesBonLivraisonFournisseur;
    }


    /**
     * Add lignes_facture_avoir_Client
     *
     * @param \Gds\VenteBundle\Entity\LigneFactureAvoirClient $lignesFactureAvoirClient
     * @return Article
     */
    public function addLignesFactureAvoirClient(\Gds\VenteBundle\Entity\LigneFactureAvoirClient $lignesFactureAvoirClient)
    {
        $this->lignes_facture_avoir_Client[] = $lignesFactureAvoirClient;

        return $this;
    }

    /**
     * Remove lignes_facture_avoir_Client
     *
     * @param \Gds\VenteBundle\Entity\LigneFactureAvoirClient $lignesFactureAvoirClient
     */
    public function removeLignesFactureAvoirClient(\Gds\VenteBundle\Entity\LigneFactureAvoirClient $lignesFactureAvoirClient)
    {
        $this->lignes_facture_avoir_Client->removeElement($lignesFactureAvoirClient);
    }

    /**
     * Get lignes_facture_avoir_Client
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getLignesFactureAvoirClient()
    {
        return $this->lignes_facture_avoir_Client;
    }

    /**
     * Add lignesInventaire
     *
     * @param \Gds\ArticleBundle\Entity\LigneInventaire $lignesInventaire
     * @return Article
     */
    public function addLignesInventaire(\Gds\ArticleBundle\Entity\LigneInventaire $lignesInventaire)
    {
        $this->lignesInventaire[] = $lignesInventaire;

        return $this;
    }

    /**
     * Remove lignesInventaire
     *
     * @param \Gds\ArticleBundle\Entity\LigneInventaire $lignesInventaire
     */
    public function removeLignesInventaire(\Gds\ArticleBundle\Entity\LigneInventaire $lignesInventaire)
    {
        $this->lignesInventaire->removeElement($lignesInventaire);
    }

    /**
     * Get lignesInventaire
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getLignesInventaire()
    {
        return $this->lignesInventaire;
    }
}
